/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package modelo;

import clases.Categoria;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
/**
 *
 * @author edder
 */
public class MdlCategoria implements Modelo<Categoria>{
    /**
     *
     * @param categoria
     * @param cnx
     * @throws SQLException
     */
    @Override
    public void insert(Categoria categoria, Conexion cnx) throws SQLException{
        String sql = "INSERT INTO categoria(nombre) "
                + "VALUES('" + categoria.getNombre() + "');";
        cnx.ejecutar(sql);
    }
    
    /**
     *
     * @param cnx
     * @return
     * @throws SQLException
     */
    @Override
    public int getLastId(Conexion cnx) throws SQLException{
        String sql = "SELECT idCategoria FROM categoria ORDER BY idCategoria DESC LIMIT 1;";
        ResultSet rs = cnx.consultar(sql);
        if(rs.next()){
            return rs.getInt(1);
        }        
        return -1;
    }
    
    /**
     *
     * @param categoria
     * @param cnx
     * @throws SQLException
     */
    @Override
    public void update(Categoria categoria, Conexion cnx) throws SQLException{
        String sql = "UPDATE categoria SET "
                + "nombre = '" + categoria.getNombre() + "' "
                + "WHERE idCategoria = " + categoria.getIdCategoria() + ";";
        cnx.ejecutar(sql);
    }
    
    /**
     * Elimina registro de la base de datos
     * @param categoria
     * @param cnx
     * @throws SQLException
     */
    public void eliminar(Categoria categoria, Conexion cnx) throws SQLException{
        String sql = "DELETE FROM categoria WHERE idCategoria = " + categoria.getIdCategoria();
        System.out.println(sql);
        cnx.ejecutar(sql);
    }
    
    /**
     * Devuelve un arraylist de categorias cuyo nombre coincide con query
     * @param query
     * @param cnx
     * @return
     * @throws SQLException
     */
    public ArrayList<Categoria> getCategorias(String query, Conexion cnx) throws SQLException{        
        String sql = "SELECT * FROM categoria WHERE nombre LIKE '%" + query + "%' ORDER BY nombre;";
        return get(sql, cnx);
    }
    
    /**
     *
     * @param sql
     * @param cnx
     * @return
     * @throws SQLException
     */
    @Override
    public ArrayList<Categoria> get(String sql, Conexion cnx) throws SQLException{
        ResultSet rs = cnx.consultar(sql);
        ArrayList<Categoria> categorias = new ArrayList<>();                
        while(rs.next()){
            Categoria categoria = new Categoria(rs.getInt(1), rs.getString(2));
            categorias.add(categoria);
        }
        return categorias;
    }
    
    /**
     *
     * @param idCategoria
     * @param cnx
     * @return
     * @throws SQLException
     */
    @Override
    public Categoria get(int idCategoria, Conexion cnx) throws SQLException{
        String sql = "SELECT * FROM categoria WHERE idCategoria = " + idCategoria;
        ResultSet rs = cnx.consultar(sql);
        Categoria categoria = null;
        if(rs.next()){
            categoria = new Categoria(rs.getInt(1), rs.getString(2));
        }
        return categoria;
    }
}
